前一篇帶各位實作了爬取 Ubuntu ISO 映像檔的爬蟲,並存在 JSON 檔。
本篇將帶各位爬取 google 上的匯率,各位應該都有試過直接在 google chrome 搜尋美金,chrome 就會回應一個目前的匯率給你。
輸入一個幣值,如果能在 chrome 上出現匯率,則讓爬蟲將其爬取下來,回應在終端機上。
以美金為例。https://www.google.com/search?q=美金
我們先來用開發工具觀察一下需求的元素,有哪些標籤方便我們爬取。
可以觀察到,我們需求的 span 元素(匯率數值)有著 class DFlfde SwHCTb
,我們能簡單寫個 requests.get 並搭配 BeautifulSoup 確認是否能夠正確定位到該元素。
import requests
from bs4 import BeautifulSoup
url = 'https://www.google.com/search?q=%E7%BE%8E%E9%87%91'
resp = requests.get(url)
soup = BeautifulSoup(resp.text, 'html5lib')
ele = soup.find('span', class_='DFlfde SwHCTb')
print(ele)
找不到該元素(None),我們能直接檢視 soup 會發現到與我們在網頁上看的不一樣。直覺地,我們能將在 chrome 上的 user-agent 放入爬蟲的 requests header,再次看是否能夠找到該元素。
import requests
from bs4 import BeautifulSoup
url = 'https://www.google.com/search?q=%E7%BE%8E%E9%87%91'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
resp = requests.get(url, headers={
'user-agent': user_agent
})
soup = BeautifulSoup(resp.text, 'html5lib')
ele = soup.find('span', class_='DFlfde SwHCTb')
print(ele)
'''
<span class="DFlfde SwHCTb" data-precision="2" data-value="27.795">27.80</span>
'''
成功爬取,接下來能直接取出該元素的 text。
import requests
from bs4 import BeautifulSoup
url = 'https://www.google.com/search?q=%E7%BE%8E%E9%87%91'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
resp = requests.get(url, headers={
'user-agent': user_agent
})
soup = BeautifulSoup(resp.text, 'html5lib')
ele = soup.find('span', class_='DFlfde SwHCTb')
print(f'目前 1 美金為 {ele.text} 新台幣')
'''
目前 1 美金為 27.80 新台幣
'''
接下來,我們能將美金換為變數,讓使用者能夠自己輸入。
import requests
from bs4 import BeautifulSoup
cointype = input('請輸入您想要爬取的幣種匯率 : ')
url = f'https://www.google.com/search?q={cointype}'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
resp = requests.get(url, headers={
'user-agent': user_agent
})
soup = BeautifulSoup(resp.text, 'html5lib')
ele = soup.find('span', class_='DFlfde SwHCTb')
if ele:
print(f'目前 1 {cointype}為 {ele.text} 新台幣')
else:
print('目前沒有匯率')
今天實作了爬取幣種匯率的爬蟲,能夠讓使用者自行輸入想要查詢的幣種。
明天會帶各位在 python 中操作 excel。